/*
? 数组去重 多种方式实现
? 1.set
? 2.排序去重 手动去重
? 3.不排序去重 filter/循环 + indexOf/includes
 */

const arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
//?方法一：set 显然，对引用类型无能为力
let newArr = [...new Set(arr)]
console.log(newArr);

//? 方法二：两层遍历+splice  因为NaN === NaN去不掉NaN 需要改成Object.is()
function unique(arr) {
    for(let i = 0; i < arr.length; i++) {
        for(let j = i + 1; j < arr.length; j++){
            if(Object.is(arr[i], arr[j])){
                arr.splice(j, 1);    //? 会改变原来的arr
                j--;
            }
        }
    }
    return arr;
}
console.log(unique(arr));
console.log(arr);


//? 方法三 ： filter+indexOf 把NaN全去掉了 pass
const newArr2 = [];
arr.filter((item, index) =>{
    //? 只入出现的第一次
    if(arr.indexOf(item) === index) {
        newArr2.push(item)
    }
})
console.log(newArr2);

//? 方法四 ： includes 这个跟set一致
let newArr3 = [];
for (let i = 0; i < arr.length; i++) {
    if(!newArr3.includes(arr[i])) {
        newArr3.push(arr[i]);
    }
}
console.log(newArr3);
